﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DomainClasses;
using Pluralsight.DataLayer;
using System.Data.Entity;
using System.Data.Entity.Validation;
//using DataLayer;

namespace ConsoleApplication
{
	class Program
	{
		static void Main( string[] args )
		{
			//Database.SetInitializer( new TweetInitializer() );
			//Database.SetInitializer( new MyInitializer() ); // Busca a Implementação definida para a Estratégia de Inicialização do Banco de Dados.
			//CreateBlog();
			//AddPost();
			//GetJustOnBlog();
			createAlias();
		}

		private static void createAlias()
		{
			var alias = new Alias
			{
				Name = "Luiz",
				Email = "luiz@gmail.com",
				UserName = "lhcorrea"
			};

			//var db = new TwitterContext();
            //db.Aliases.Add( alias );
            //// Mesmo sem ir ao banco podemos identificar problemas de validação.
            //if( db.GetValidationErrors().Count() > 0 )
            //{
            //    Console.WriteLine( "Erro na Validação" );
            //    return;
            //}

            //try
            //{
            //    db.SaveChanges();
            //}
            //catch( Exception ex )
            //{
            //    throw;
            //}
		}

		private static void GetJustOnBlog()
		{
			var db = new Context();
			var firstBlog = db.Blogs.First();

			foreach( Blog blog in db.Blogs.Local ) // Busca os objetos que estão na memória e não no Banco.
			{
				Console.WriteLine( "{0}", blog.Title );
			}

			Console.ReadKey();
		}

		private static void CreateBlog()
		{
			var blog = new Blog
			{
				BloggerName = "Julie",
				Title = "Short Title"
			};

			var db = new Context();
			db.Blogs.Add( blog );

			try
			{
				db.SaveChanges();
			}
			catch( DbEntityValidationException ex )
			{
				foreach( var entityError in ex.EntityValidationErrors )
				{
					Console.WriteLine( entityError.Entry.Entity.GetType().Name );
					foreach( var error in entityError.ValidationErrors )
					{
						Console.WriteLine( "{0}: {1}", error.PropertyName, error.ErrorMessage );
					}
				}
				throw;
			}
		}


		private static void AddPost()
		{
			var db = new Context();
			var blog = db.Blogs.Find( 1 );
			blog.Posts.Add( new Post
			{
				Title = "My First Post",
				Content = "Let´s keep this short."
			} );
			
			db.SaveChanges();
		}
	}
}
